package engine

import (
	"log"
	"spider/crawler/fetcher"
)

// 获取种子 分配任务 1.抓取 2，解析
func Run(seeds ...Request) {

	//url 和 解析函数
	var requests []Request
	//放入到requests中
	for _, r := range seeds {
		requests = append(requests, r)
	}

	// 有请求
	for len(requests) > 0 {
		r := requests[0]
		requests = requests[1:]
		log.Printf("Fetching %s", r.Url)
		body, err := fetcher.Fetch(r.Url) //通过url抓取数据
		if err != nil {
			log.Printf("Fetcher:error"+"fetching url %s:%v", r.Url, err)
			continue
		}

		//拿到抓取的数据 开始解析
		parseResult := r.ParserFunc(body) //解析数据
		//将解析数据中的请求 添加到request中
		requests = append(requests, parseResult.Requests...) //将数据展开 一个个加进去

		//打印item
		for _, item := range parseResult.Items {
			log.Printf("Got item %v", item)
		}
	}
}
